package com.iswoak.netctoss.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp.BasicDataSource;


/**
 * JDBC 连接工具类
 * @author zYu
 */
public class DBUtil {
	
	//连接池
	private static BasicDataSource ds;
	static{
		try {
			//加载properties配置文件
			Properties prop=new Properties();
			//获取配置文件的输入流
			InputStream is= DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
			//通过输入流把配置文件加载到prop对象中
			prop.load(is);
			is.close();
			//创建连接池
			ds=new BasicDataSource();
			//通过prop对象来提取属性内容设置到连接池中
			ds.setDriverClassName(prop.getProperty("driver"));
			ds.setUrl(prop.getProperty("url"));
			ds.setUsername(prop.getProperty("user"));
			ds.setPassword(prop.getProperty("password"));
			//加载驱动--交给连接池
			ds.setInitialSize(Integer.valueOf(prop.getProperty("initsize")));
			ds.setMaxActive(Integer.valueOf(prop.getProperty("maxsize")));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 得到一个连接
	 * 得到的是dbcp连接池中的一个连接，这个连接
	 * 是由连接池创建的，但是还是用到了mysql jar包中的
	 * 驱动
	 * @return
	 */
	public static Connection getConnection(){
		Connection conn=null;
		try {
			conn= ds.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	/**
	 * 关闭连接和PS
	 * @param conn
	 * @param ps
	 */
	public static void closeConnectionAndPreparedStatement(Connection conn,PreparedStatement ps){
		if(ps!=null){
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		closeConnection(conn);
	}
	/**
	 * 关闭一个连接
	 * 执行的是connection的关闭方法
	 * 但是实际是把连接归还给了连接池
	 * @param conn
	 */
	public static void closeConnection(Connection conn){
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}
